/* 
 * File:   Contador.cpp
 * Author: User007
 * 
 * Created on August 19, 2011, 6:00 PM
 */

#include <cv.h>
#include <highgui.h>
#include <math.h>
#include <stdio.h>
#include "CalcularCM.h"
#include "PreProcessador.h"
#include "EstruturaEquivalente.h"
#include "ImgMatriz.h"
#include "Contador.h"
#include "SegmentaRGB.h"

Contador::Contador() {
}

Contador::Contador(const Contador& orig) {
}

Contador::~Contador() {
}

void Contador::Executar() {

    //IplImage* img_cartela = cvLoadImage("teste.png", CV_LOAD_IMAGE_UNCHANGED);
    IplImage* img_comprimido = cvLoadImage("teste.png", CV_LOAD_IMAGE_UNCHANGED);
    IplImage* img_original = cvLoadImage("teste.png", CV_LOAD_IMAGE_UNCHANGED);

    SegmentaRGB srgb;
    //srgb.SegmentaImg(img_cartela);
    srgb.SegmentaImg(img_comprimido);

    PreProcessador pp;
    pp.PreProcesso_comprimido(img_comprimido);
    //pp.PreProcesso_cartela(img_cartela);
    cvSaveImage("PreProcess.jpg", img_comprimido);

    CalcularCM cm_comprimido;
    cm_comprimido.ListarCM(img_comprimido);
    cm_comprimido.CriaImg(img_comprimido);
    //CalcularCM cm_cartela;
    //cm_cartela.ListarCM(img_cartela);

    CvFont dfont;
    float hscale = 0.7f;
    float vscale = 0.7f;
    float italicscale = 0.0f;
    int thickness = 2;
    //ListaLigada_labelRegiao lista_cartelas_falta;


    cvInitFont(&dfont, CV_FONT_HERSHEY_SIMPLEX, hscale, vscale, italicscale, thickness, CV_AA);

    cm_comprimido.MarcarCM(img_original);

    for (int i = 0; i < cm_comprimido.listaCentroMassa.size; i++) {
        posicao_struct p_cm;
        p_cm.x = cm_comprimido.listaCentroMassa.get(i).x;
        p_cm.y = cm_comprimido.listaCentroMassa.get(i).y;

        cvCircle(img_original, cvPoint(p_cm.x, p_cm.y), 20, CV_RGB(0, 255, 255), 5, CV_AA, 0);

//        int label = cm_cartela.matrizRegioes[p_cm.x][p_cm.y].GetLabel();
//        labelRegiao_struct lr;
//        lr.label = label;
//        lista_cartelas_falta.add(lr);
    }

//    for (int i = 0; i < cm_cartela.listaCentroMassa.size; i++) {
//        posicao_struct p;
//        p.x = cm_cartela.listaCentroMassa.get(i).x;
//        p.y = cm_cartela.listaCentroMassa.get(i).y;
//        int label = cm_cartela.matrizRegioes[p.x][p.y].GetLabel();
//
//        for (int j = 0; j < lista_cartelas_falta.size; j++) {
//            if (label == lista_cartelas_falta.get(j)->label) {
//                              
//                char texto[255] = "CARTELA FALTA";
//               
//                cvPutText(img_original, texto, cvPoint(p.x - 70, p.y), &dfont, CV_RGB(255, 10, 10));
//            }
//        }
//    }

    cvSaveImage("Resultado.jpg", img_original);  
    cvNamedWindow("Resultado", 1);
    cvShowImage("Resultado", img_original);
    cvWaitKey(0);
}

